﻿using System;
using System.Text;
using System.Drawing;
using System.Buffers;
using System.Collections;
using System.Collections.Generic;
using System.Runtime.InteropServices;

public static partial class glDRIVE
{
    /*
    函数 gl.maqr
    实矩阵的QR分解
    参数 a: a[m][n]存放m×n的实矩阵A。要求 m>=n。返回时其右上三角部分存放QR分解中的上三角阵R。
    参数 m: 
    参数 n: 
    参数 q: q[m][m]返回QR分解中的正交矩阵Q。
    返回值 若为0，则表示失败；若不为0，则表示正常。
    */

    public static string drive_maqr()
    {
        int i, j;
        double[,] r = new double[4, 3];
        double[,] q = new double[4, 4];
        double[,] a = new double[4, 3] {
            {1.0,1.0,-1.0},
            {2.0,1.0,0.0},
            {1.0,-1.0,0.0},
            {-1.0,2.0,1.0}
        };
        for (i = 0; i <= 3; i++)
            for (j = 0; j <= 2; j++) r[i, j] = a[i, j];
        i = gl.maqr(r, 4, 3, q);
        if (i == 0) return "error: 0";

        return gl.html_table("MAT A:", a) +
               gl.html_table("MAT Q:", q) +
               gl.html_table("MAT R:", r);

    }
}